
/*
    用于处理与管理员相关的HTTP请求

* 这个控制器类通过与Service服务层的交互，实现了对管理员信息的增删改查（CRUD）功能。
* 具体的数据库操作是在服务层（Service）中实现的，控制器层主要负责接收请求、调用服务层方法和返回响应。
*
* 包名定义和导入相关类：用于组织代码结构和提供必要的功能支持。
AdminController 类：使用@Controller注解标识这是一个控制器类。
adminService：使用@Autowired注解自动注入AdminService，以便在控制器中调用服务层的方法。
adminIndex方法：处理/adminIndex请求，返回管理员首页视图。
queryAdminAll方法：处理/adminAll请求，返回所有管理员信息的分页数据，实现了“查”的功能。
adminAdd方法：跳转到添加管理员页面。
addBookSubmit方法：提交添加管理员信息，实现了“增”的功能。
queryAdminById方法：根据id查询管理员信息，用于更新页面。
updatePwdSubmit方法：提交更新管理员密码信息，实现了“改”的功能。
deleteAdminByIds方法：删除管理员信息，实现了“删”的功能。
*

* */

package com.yx.controller; // 定义包名，用于组织代码结构

import com.github.pagehelper.PageInfo; // 导入PageInfo，用于封装分页信息
import com.yx.po.Admin; // 导入Admin实体类，用于封装管理员信息
import com.yx.service.AdminService; // 导入AdminService接口，定义管理员服务
import com.yx.utils.DataInfo; // 导入DataInfo工具类，用于封装返回数据
import org.springframework.beans.factory.annotation.Autowired; // 导入Spring的Autowired注解，用于自动注入依赖
import org.springframework.stereotype.Controller; // 导入Controller注解，标识这是一个控制器类
import org.springframework.ui.Model; // 导入Model接口，用于向视图传递数据
import org.springframework.web.bind.annotation.GetMapping; // 导入GetMapping注解，用于映射GET请求
import org.springframework.web.bind.annotation.RequestMapping; // 导入RequestMapping注解，用于映射请求
import org.springframework.web.bind.annotation.RequestParam; // 导入RequestParam注解，用于获取请求参数
import org.springframework.web.bind.annotation.ResponseBody; // 导入ResponseBody注解，用于返回响应体

import java.util.Arrays; // 导入Arrays工具类，用于操作数组
import java.util.List; // 导入List接口，用于操作列表

// 使用Controller注解标识这是一个控制器类
@Controller
public class AdminController {

    // 使用Autowired注解自动注入AdminService
    @Autowired
    private AdminService adminService;

    // 处理/adminIndex请求，返回管理员首页视图
    @GetMapping("/adminIndex")
    public String adminIndex(){
        return "admin/adminIndex";
    }

    // 处理/adminAll请求，返回所有管理员信息的分页数据
    @RequestMapping("/adminAll")
    @ResponseBody
    public DataInfo queryAdminAll(Admin admin, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "15") Integer limit){
        PageInfo<Admin> pageInfo = adminService.queryAdminAll(admin,pageNum,limit); // 调用AdminService的方法查询管理员信息
        return DataInfo.ok("成功",pageInfo.getTotal(),pageInfo.getList()); // 使用DataInfo工具类封装返回数据
    }

    /**
     * 跳转到添加管理员页面
     * @return 返回添加管理员页面的视图名称
     */
    @GetMapping("/adminAdd")
    public String adminAdd(){
        return "admin/adminAdd";
    }

    /**
     * 提交添加管理员信息
     * @param admin 管理员实体对象
     * @return 返回操作结果
     */
    @RequestMapping("/addAdminSubmit")
    @ResponseBody
    public DataInfo addBookSubmit(Admin admin){
        adminService.addAdminSubmit(admin); // 调用AdminService的方法添加管理员
        return DataInfo.ok(); // 返回操作成功的结果
    }

    /**
     * 根据id查询管理员信息，用于更新页面
     * @param id 管理员ID
     * @param model 模型对象，用于向视图传递数据
     * @return 返回更新管理员页面的视图名称
     */
    @GetMapping("/queryAdminById")
    public String queryAdminById(Integer id, Model model){
        model.addAttribute("id",id); // 将管理员ID添加到模型中
        return "admin/updateAdmin"; // 返回更新管理员页面的视图名称
    }

    /**
     * 提交更新管理员密码信息
     * @param id 管理员ID
     * @param oldPwd 旧密码
     * @param newPwd 新密码
     * @return 返回操作结果
     */
    @RequestMapping("/updatePwdSubmit")
    @ResponseBody
    public DataInfo updatePwdSubmit(Integer id,String oldPwd,String newPwd){
        Admin admin = adminService.queryAdminById(id); // 根据id查询管理员对象
        if (!oldPwd.equals(admin.getPassword())){ // 比较旧密码是否正确
            return DataInfo.fail("输入的旧密码错误"); // 返回错误信息
        }else{
            admin.setPassword(newPwd); // 更新密码
            adminService.updateAdminSubmit(admin); // 提交更新
            return DataInfo.ok(); // 返回操作成功的结果
        }
    }

    /**
     * 删除管理员信息
     * @param ids 管理员ID字符串，以逗号分隔
     * @return 返回操作结果
     */
    @RequestMapping("/deleteAdminByIds")
    @ResponseBody
    public DataInfo deleteAdminByIds(String ids){
        List<String> list = Arrays.asList(ids.split(",")); // 将ID字符串转换为列表
        adminService.deleteAdminByIds(list); // 调用AdminService的方法删除管理员
        return DataInfo.ok(); // 返回操作成功的结果
    }
}